/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.paroquiadegloria.ejc.dao;

import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import org.paroquiadegloria.ejc.entidade.Encontro;

/**
 *
 * @author jadson
 */
public class EncontroDao {

    public boolean inserirEncontro(Encontro encontro) throws Exception {
        StringBuilder sql = new StringBuilder();
        sql.append("insert into encontro (");
        sql.append("enco_ds_titulo, ");
        sql.append("enco_nr_ano, ");
        sql.append("enco_ds_lema, ");
        sql.append("enco_dt_inicio_encontro, ");
        sql.append("enco_dt_final_encontro, ");
        sql.append("enco_dt_cadastro) ");
        sql.append("values(?,?,?,?,?,?)");
        Connection con = null;
        PreparedStatement ps = null;

        boolean resultado = false;
        try {
            con = ConnectionFactory.getConnection();
            ps = con.prepareStatement(sql.toString());
            int index = 1;
            Date dataAux;

            ps.setString(index++, encontro.getTitulo());
            ps.setInt(index++, encontro.getAno().intValue());
            ps.setString(index++, encontro.getLema());

            dataAux = new Date(encontro.getDataInicioEncontro().getTime());
            ps.setDate(index++, dataAux);
            
            dataAux = new Date(encontro.getDataFimEncontro().getTime());
            ps.setDate(index++, dataAux);

            dataAux = new Date(encontro.getDataCadastroEncotro().getTime());
            ps.setDate(index++, dataAux);

            resultado = ps.execute();

        } catch (SQLException ex) {
            throw ex;
        } finally {
            if (ps != null) {
                ps.close();
            }
        }

        return resultado;
    }

    public Encontro obterEncontro(int codigo) throws Exception {
        String sql = "select * from encontro where enco_cd_encontro = ?";
        Connection con = ConnectionFactory.getConnection();
        PreparedStatement ps = null;
        ResultSet resultSet = null;

        Encontro encontro = null;
        try {
            ps = con.prepareStatement(sql);
            ps.setInt(1, codigo);

            resultSet = ps.executeQuery();

            if (resultSet.next()) {
                encontro = new Encontro();
                encontro.setAno(new Integer(resultSet.getInt("enco_nr_ano")));
                encontro.setCodigo(new Integer(resultSet.getInt("enco_cd_encontro")));
                encontro.setDataCadastroEncotro(resultSet.getDate("enco_dt_data_cadastro"));
                encontro.setDataFimEncontro(resultSet.getDate("enco_dt_fim_encontro"));
                encontro.setDataInicioEncontro(resultSet.getDate("enco_dt_inicio_encontro"));
                encontro.setLema(resultSet.getString("enco_ds_lema"));
                encontro.setTitulo(resultSet.getString("enco_ds_titulo"));
            }

        } catch (SQLException ex) {
            throw ex;
        } finally {
            if (resultSet != null) {
                resultSet.close();
            }
            if (ps != null) {
                ps.close();
            }
        }

        return encontro;
    }

    public Encontro obterEncontroPorTituloAno(String titulo, int ano) throws Exception {
        String sql = "select * from encontro where trim(enco_ds_titulo)= ? and enco_nr_ano = ?";
        Connection con = ConnectionFactory.getConnection();
        PreparedStatement ps = null;
        ResultSet resultSet = null;

        Encontro encontro = null;
        try {
            ps = con.prepareStatement(sql);
            ps.setString(1, titulo);
            ps.setInt(2, ano);

            resultSet = ps.executeQuery();

            if (resultSet.next()) {
                encontro = new Encontro();
                encontro.setAno(new Integer(resultSet.getInt("enco_nr_ano")));
                encontro.setCodigo(new Integer(resultSet.getInt("enco_cd_encontro")));
                encontro.setDataCadastroEncotro(resultSet.getDate("enco_dt_cadastro"));
                encontro.setDataFimEncontro(resultSet.getDate("enco_dt_final_encontro"));
                encontro.setDataInicioEncontro(resultSet.getDate("enco_dt_inicio_encontro"));
                encontro.setLema(resultSet.getString("enco_ds_lema"));
                encontro.setTitulo(resultSet.getString("enco_ds_titulo"));
            }

        } catch (SQLException ex) {
            throw ex;
        } finally {
            if (resultSet != null) {
                resultSet.close();
            }
            if (ps != null) {
                ps.close();
            }
        }

        return encontro;
    }

    public List<Encontro> obterTodosOsEncontros() throws Exception{
        String sql = "select * from encontro order by enco_nr_ano desc";
        Connection con = ConnectionFactory.getConnection();
        PreparedStatement ps = null;
        ResultSet resultSet = null;

        List<Encontro> encontroList = new ArrayList<Encontro>();
        try {
            ps = con.prepareStatement(sql);
            resultSet = ps.executeQuery();

            while(resultSet.next()) {
                Encontro encontro = new Encontro();
                encontro.setAno(new Integer(resultSet.getInt("enco_nr_ano")));
                encontro.setCodigo(new Integer(resultSet.getInt("enco_cd_encontro")));
                encontro.setDataCadastroEncotro(resultSet.getDate("enco_dt_cadastro"));
                encontro.setDataFimEncontro(resultSet.getDate("enco_dt_final_encontro"));
                encontro.setDataInicioEncontro(resultSet.getDate("enco_dt_inicio_encontro"));
                encontro.setLema(resultSet.getString("enco_ds_lema"));
                encontro.setTitulo(resultSet.getString("enco_ds_titulo"));
                
                encontroList.add(encontro);
            }

        } catch (SQLException ex) {
            throw ex;
        } finally {
            if (resultSet != null) {
                resultSet.close();
            }
            if (ps != null) {
                ps.close();
            }
        }
        
        return encontroList;
    }
}
